package com.eduagent.xwqeduagent.api.imageTranslation.api;

import com.eduagent.xwqeduagent.api.imageTranslation.model.ImageInfo;
import com.eduagent.xwqeduagent.api.imageTranslation.model.ImageTranslationResponse;

import java.io.File;
import java.io.InputStream;

/**
 * 图片翻译API接口
 */
public interface ImageTranslationApi {

    /**
     * 上传并翻译图片
     *
     * @param from 源语言代码
     * @param to 目标语言代码
     * @param file 图片文件
     * @param base64 图片Base64编码（与file二选一）
     * @param realmCode 领域代码（可选）
     * @param termId 术语词典ID（可选）
     * @param memoryId 翻译记忆库ID（可选）
     * @return 图片翻译响应，包含fileNo
     */
    ImageTranslationResponse uploadAndTranslate(String from, String to, File file, String base64,
                                                Integer realmCode, String termId, String memoryId);

    /**
     * 获取图片翻译信息和状态
     *
     * @param fileNo 文件编号
     * @return 图片信息
     */
    ImageInfo getImageInfo(String fileNo);

    /**
     * 中断/终止图片翻译
     *
     * @param fileNo 文件编号
     * @return 是否成功终止
     */
    boolean interruptTranslation(String fileNo);

    /**
     * 获取图片翻译下载链接
     *
     * @param fileNo 文件编号
     * @param type 下载类型（0: 原图, 1: 译图, 2: 双语图）
     * @return 下载链接
     */
    String getDownloadUrl(String fileNo, Integer type);

    /**
     * 下载翻译后的图片
     *
     * @param fileNo 文件编号
     * @param type 下载类型（0: 原图, 1: 译图, 2: 双语图）
     * @return 图片输入流
     */
    InputStream downloadImage(String fileNo, Integer type);

    /**
     * 删除图片翻译文件
     *
     * @param fileNo 文件编号
     * @return 是否成功删除
     */
    boolean deleteImage(String fileNo);
    
    /**
     * 同步翻译图片
     *
     * @param from 源语言代码
     * @param to 目标语言代码
     * @param file 图片文件
     * @param base64 图片Base64编码（与file二选一）
     * @param resultType 结果类型（0: 文件流, 1: base64编码）
     * @param realmCode 领域代码（可选）
     * @param termId 术语词典ID（可选）
     * @param memoryId 翻译记忆库ID（可选）
     * @return 图片翻译响应
     */
    Object translateImageSync(String from, String to, File file, String base64, Integer resultType,
                            Integer realmCode, String termId, String memoryId);
} 